import request from './axios';
import qs from 'qs';

/**
 * 封装get请求
 * @param {string} url 请求地址
 * @param {Object} params 请求参数
 * @param {Object} headers 请求头
 * @return {Promise}
 */
function get(url, params = {}, headers) {
    return new Promise((resolve, reject) => {
        request
            .get(url, { params, headers })
            .then((res) => {
                resolve(res.data);
            })
            .catch((err) => {
                reject(err);
            });
    });
}

/**
 * 封装post请求
 * @param {string} url 请求地址
 * @param {Object} data 请求参数
 * @param {Object} headers 请求头
 * @return {Promise}
 */
function post(url, data = {}, headers) {
    return new Promise((resolve, reject) => {
        request
            .post(url, qs.stringify(data), headers)
            .then((res) => {
                resolve(res.data);
            })
            .catch((err) => {
                reject(err);
            });
    });
}

/**
 * 封装post请求
 * @param {string} url 请求地址
 * @param {Object} data 请求参数
 * @param {Object} headers 请求头数据
 * @return {Promise}
 */
function postForm(url, data = {}, headers, params = {}) {
    return new Promise((resolve, reject) => {
        request
            .post(url, data, { headers, params })
            .then((res) => {
                resolve(res.data);
            })
            .catch((err) => {
                reject(err);
            });
    });
}

function uploadFile(url, data, headers) {
    return new Promise((resolve, reject) => {
        let formData = new FormData();
        formData.append('file', data);
        request
            .post(url, formData, { ...headers })
            .then((res) => {
                resolve(res.data);
            })
            .catch((err) => {
                reject(err);
            });
    });
}

function download(url, params = {}, headers) {
    return new Promise((resolve, reject) => {
        request
            .get(url, {
                params: params,
                responseType: 'blob',
                headers,
            })
            .then((res) => {
                resolve(res);
            })
            .catch((err) => {
                reject(err);
            });
    });
}

// function downloadPost(url, data, headers) {
//     return new Promise((resolve, reject) => {
//         request
//             .post(url, data, { responseType: 'blob', headers })
//             .then((res) => {
//                 resolve(res);
//             })
//             .catch((err) => {
//                 reject(err);
//             });
//     });
// }

/**
 * 封装put请求
 * @param {string} url 请求地址
 * @param {Object} data 请求参数
 * @param {Object} headers 请求头
 * @return {Promise}
 */
function put(url, data = {}, headers) {
    return new Promise((resolve, reject) => {
        request
            .put(url, data, headers)
            .then((res) => {
                resolve(res.data);
            })
            .catch((err) => {
                reject(err);
            });
    });
}

/**
 * 封装delete请求
 * @param {string} url 请求地址
 * @param {Object} data 请求参数
 * @param {Object} headers 请求头
 * @return {Promise}
 */
function remove(url, data = {}, headers) {
    return new Promise((resolve, reject) => {
        request
            .delete(url, { data, headers })
            .then((res) => {
                resolve(res.data);
            })
            .catch((err) => {
                reject(err);
            });
    });
}

export default {
    get,
    post,
    postForm,
    uploadFile,
    download,
    // downloadPost,
    put,
    remove,
};
